home *** CD-ROM | disk | FTP | other *** search
- package ms.applet;
-
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.PrintStream;
- import java.net.URL;
- import java.net.URLConnection;
- import java.util.Hashtable;
- import sun.tools.zip.ZipEntry;
- import sun.tools.zip.ZipFormatException;
- import sun.tools.zip.ZipReader;
-
- class AppletZipClassLoader extends AppletClassLoader {
- Hashtable classBytes = new Hashtable();
-
- AppletZipClassLoader(AppletViewer var1, URL var2) throws IOException {
- super(var1, var2);
- System.out.println("loading zip file from " + var2);
- Thread var3 = Thread.currentThread();
-
- try {
- URLConnection var4 = var2.handler.openConnection(var2);
- var4.setAllowUserInteraction(false);
- ZipReader var5 = new ZipReader(var4.getInputStream());
-
- while(var5.nextEntry() && !var3.isInterrupted()) {
- ZipEntry var6 = var5.getEntry();
- String var7 = var6.getPath();
- if (var7.startsWith(".class", var7.count - ".class".count)) {
- InputStream var8 = var5.getInputStream();
- int var9 = (int)var6.length();
- byte[] var10 = new byte[var9];
- System.out.println(" " + var7 + " (" + var9 + " bytes)");
-
- int var12;
- for(int var11 = 0; var11 < var9 && !var3.isInterrupted(); var11 += var12) {
- var12 = var8.read(var10, var11, var9 - var11);
- if (var12 == -1) {
- throw new ZipFormatException("bad entry: " + var7);
- }
- }
-
- if (var3.isInterrupted()) {
- break;
- }
-
- String var14 = var7.substring(0, var7.count - 6).replace('/', '.');
- this.classBytes.put(var14, var10);
- }
- }
- } catch (Throwable var13) {
- var13.printStackTrace();
- throw new IOException("could not load zip file: " + var2);
- }
-
- if (var3.isInterrupted()) {
- this.classBytes = new Hashtable();
- throw new IOException("zip loading interrupted: " + var2);
- }
- }
-
- public Class loadClass(String var1) throws ClassNotFoundException {
- return this.loadClass(var1, true);
- }
-
- protected Class loadClass(String var1, boolean var2) throws ClassNotFoundException {
- Class var3 = (Class)super.classes.get(var1);
- if (var3 == null) {
- SecurityManager var4 = System.security;
- if (var4 != null) {
- int var5 = var1.lastIndexOf(46, var1.count - 1);
- if (var5 >= 0) {
- var4.checkPackageAccess(var1.substring(0, var5));
- }
- }
-
- try {
- if (!super.initialized) {
- throw new SecurityException("Security Exception: ClassLoader object not initialized.");
- }
-
- return super.findSystemClass0(var1);
- } catch (Throwable var6) {
- var3 = this.findClass(var1);
- }
- }
-
- if (var3 == null) {
- throw new ClassNotFoundException(var1);
- } else {
- if (var2) {
- if (!super.initialized) {
- throw new SecurityException("Security Exception: ClassLoader object not initialized.");
- }
-
- super.resolveClass0(var3);
- }
-
- return var3;
- }
- }
-
- private synchronized Class findClass(String var1) {
- Class var2 = (Class)super.classes.get(var1);
- if (var2 == null) {
- SecurityManager var3 = System.security;
- PrintStream var10000 = System.out;
- StringBuffer var10001 = new StringBuffer();
- Thread var4 = Thread.currentThread();
- char[] var5 = var4.name;
- var10000.println(var10001.append(new String(var5)).append(" find class ").append(var1).toString());
- if (var3 != null) {
- int var7 = var1.lastIndexOf(46, var1.count - 1);
- if (var7 >= 0) {
- var3.checkPackageDefinition(var1.substring(0, var7));
- }
- }
-
- byte[] var8 = (byte[])this.classBytes.get(var1);
- if (var8 != null) {
- try {
- int var9 = var8.length;
- if (!super.initialized) {
- throw new SecurityException("Security Exception: ClassLoader object not initialized.");
- }
-
- var2 = super.defineClass0(var8, 0, var9);
- if (!var1.equals(var2.getName())) {
- throw new ClassFormatError();
- }
- } catch (ClassFormatError var6) {
- System.err.println("Class format error: " + var1);
- return null;
- }
-
- super.classes.put(var1, var2);
- this.classBytes.remove(var1);
- }
- }
-
- return var2;
- }
- }
-